import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

import jsPDF from 'jspdf';
import { museumData } from '../components/Sidebar';
import html2canvas from 'html2canvas';

/**
 * 将指定元素导出为PDF文件
 * @param elementId 要导出为PDF的元素ID
 * @param fileName 下载的PDF文件名
 */
export async function downloadAsPDF(elementId: string, fileName: string) {
  // 查找要导出的元素
  const element = document.getElementById(elementId);
  
  if (!element) {
    alert("未找到要导出的内容");
    return;
  }
  
  try {
    // 显示加载状态
    const originalText = element.style.cursor;
    element.style.cursor = 'wait';
    
    // 使用html2canvas捕获元素内容
    const canvas = await html2canvas(element, {
      scale: 2, // 提高分辨率
      useCORS: true,
      logging: false
    });
    
    // 创建PDF文档
    const pdf = new jsPDF('p', 'mm', 'a4');
    const imgData = canvas.toDataURL('image/jpeg', 0.95);
    const imgWidth = 210; // A4宽度(mm)
    const imgHeight = (canvas.height * imgWidth) / canvas.width;
    
    // 添加图片到PDF
    pdf.addImage(imgData, 'JPEG', 0, 0, imgWidth, imgHeight);
    
    // 保存PDF
    pdf.save(`${fileName}.pdf`);
    
    // 恢复状态
    element.style.cursor = originalText;
    
    // 显示成功消息
    alert(`PDF文件 "${fileName}.pdf" 已成功生成并下载`);
  } catch (error) {
    console.error('PDF生成失败:', error);
    alert('PDF文件生成失败，请重试');
  }
}

/**
 * 将指定博物馆的所有文物内容导出为PDF文件
 * @param museumId 博物馆ID
 * @param museumName 博物馆名称
 */
export async function downloadMuseumArtifactsAsPDF(museumId: string, museumName: string) {
  // 查找博物馆数据
  const museum = museumData.find(m => m.id === museumId);
  if (!museum) {
    alert("未找到博物馆数据");
    return;
  }
  
  try {
  // 创建临时容器 - 设置为可见但定位在屏幕外
  const tempContainer = document.createElement('div');
  tempContainer.style.position = 'fixed';
  tempContainer.style.top = '-9999px';
  tempContainer.style.left = '-9999px';
  tempContainer.style.width = '100%';
  tempContainer.style.maxWidth = '800px';
  tempContainer.style.margin = '0 auto';
    document.body.appendChild(tempContainer);
    
    // 显示加载状态
    alert(`正在准备${museumName}文物资料，请稍候...`);
    
    // 添加博物馆封面信息
    const coverHeader = document.createElement('div');
    coverHeader.className = 'p-6 text-center mb-8 border-b border-gray-300';
    coverHeader.innerHTML = `
      <h1 class="text-3xl font-bold mb-2">${museumName}文物资料集</h1>
      <p class="text-gray-600">共${museum.artifacts.length}件文物</p>
      <div class="w-20 h-1 bg-gray-300 mx-auto mt-4"></div>
    `;
    tempContainer.appendChild(coverHeader);
    
    // 模拟加载文物内容
    for (const artifact of museum.artifacts) {
      const artifactSection = document.createElement('div');
      artifactSection.className = 'mb-12 page-break-after:always';
      
      // 创建文物内容占位（实际应用中应动态加载组件）
      artifactSection.innerHTML = `
        <div class="border rounded-lg overflow-hidden shadow-sm mb-6">
          <div class="bg-gray-100 p-4 border-b">
            <h2 class="text-2xl font-bold">${artifact.name}</h2>
          </div>
          <div class="p-4">
            <div class="bg-gray-200 h-64 flex items-center justify-center mb-4">
              <p class="text-gray-500">文物图片</p>
            </div>
            <p class="text-gray-700 mb-4">这是${artifact.name}的详细介绍内容。该文物具有重要的历史价值和艺术价值，反映了当时的文化特色和工艺水平。</p>
            <div class="grid grid-cols-2 gap-4 text-sm">
              <div class="bg-gray-50 p-3 rounded">
                <p class="font-medium">年代</p>
                <p class="text-gray-600">古代时期</p>
              </div>
              <div class="bg-gray-50 p-3 rounded">
                <p class="font-medium">材质</p>
                <p class="text-gray-600">多种材料</p>
              </div>
              <div class="bg-gray-50 p-3 rounded">
                <p class="font-medium">尺寸</p>
                <p class="text-gray-600">标准大小</p>
              </div>
              <div class="bg-gray-50 p-3 rounded">
                <p class="font-medium">出土地址</p>
                <p class="text-gray-600">考古发现地</p>
              </div>
            </div>
          </div>
        </div>
      `;
      
      tempContainer.appendChild(artifactSection);
    }
    
    // 使用html2canvas和jspdf生成PDF
    const pdf = new jsPDF('p', 'mm', 'a4');
    const containerHeight = tempContainer.scrollHeight;
    const containerWidth = tempContainer.scrollWidth;
    
    // 计算需要多少页
    const pageHeight = 297; // A4高度(mm)
    const pageWidth = 210; // A4宽度(mm)
    const scale = pageWidth / containerWidth;
    const totalPages = Math.ceil(containerHeight * scale / pageHeight);
    
  // 确保容器内容已完全渲染
  await new Promise(resolve => setTimeout(resolve, 500));
  
  // 为每一页生成内容
  for (let i = 0; i < totalPages; i++) {
    const canvas = await html2canvas(tempContainer, {
      y: i * containerHeight / totalPages,
      height: containerHeight / totalPages,
      windowWidth: containerWidth,
      scale: 2, // 提高分辨率
      useCORS: true, // 允许跨域图片
      logging: false
      });
      
      const imgData = canvas.toDataURL('image/jpeg', 0.95);
      const imgHeight = canvas.height * pageWidth / canvas.width;
      
      if (i > 0) {
        pdf.addPage();
      }
      
      pdf.addImage(imgData, 'JPEG', 0, 0, pageWidth, imgHeight);
    }
    
  // 保存PDF
  pdf.save(`${museumName}文物资料集.pdf`);
  
  // 验证是否生成了内容
  if (pdf.internal.getNumberOfPages() <= 1) {
    console.error("PDF生成警告: 可能没有捕获到内容");
    alert("PDF生成完成，但内容可能不完整。请检查网络连接或稍后重试。");
  }
  
  // 清理临时容器
    document.body.removeChild(tempContainer);
    
    alert(`PDF文件 "${museumName}文物资料集.pdf" 已成功生成并下载，包含所有${museum.artifacts.length}件文物`);
  } catch (error) {
    console.error('PDF生成失败:', error);
    alert('PDF文件生成失败，请重试');
  }
}
